#ifndef __BSP_MY_KEY_H
#define __BSP_MY_KEY_H

#include "bsp_port.h"

// #error 读取按键所连接引脚的状态 不要加;
#define KEY01_ISIN LL_GPIO_IsInputPinSet(GPIOC, LL_GPIO_PIN_13) // 读取相应引脚的电平
#define KEY02_ISIN LL_GPIO_IsInputPinSet(GPIOB, LL_GPIO_PIN_14) // 读取相应引脚的电平
#define KEY03_ISIN LL_GPIO_IsInputPinSet(GPIOB, LL_GPIO_PIN_15) // 读取相应引脚的电平

// 按键可能所处的状态
typedef enum
{
    KeyFree,       // 空闲
    oneClick,      // 单击
    twoClick,      // 双击
    longClick,     // 长按
    longClickLock, // 长按锁定 防止长按多次误触
} KeyState;

// 按键 相关配置参数
typedef struct
{
    uint16_t KeyPressTimer;            // 被按下的时间
    uint8_t KeyPressCount;             // 被按下的次数
    uint16_t KeyCheckCycle;            // 检测周期
    KeyState KEYSTATE;                 // 按键的状态
    uint16_t KeyLongTimer;             // 长按时间
    uint8_t KEYTriggerMode : 1;        // 触发方式  0低电平触发、1高电平触发
    uint8_t KEYEnable : 1;             // 使能 0是禁用    1是使能(默认)
    void (*KEY_oneClick_event)(void);  // 按键单击事件
    void (*KEY_twoClick_event)(void);  // 按键双击事件
    void (*KEY_longClick_event)(void); // 按键长按事件
} Key_Function;

/****************************************************************************************************************/
void KEY_obj_Activate(uint32_t pin, Key_Function *KeyObj);                  // 创建一个多功能按键
void KEY_obj_event(Key_Function *KeyObj);                                   // 按键 单击、双击、长按 事件函数
void KEY_obj_setOneClick_event(Key_Function *KeyObj, void (*event)(void));  // 设置按键对象的 单击 事件
void KEY_obj_setOTwoClick_event(Key_Function *KeyObj, void (*event)(void)); // 设置按键对象的 双击 事件
void KEY_obj_setLongClick_event(Key_Function *KeyObj, void (*event)(void)); // 设置按键对象的 长按 事件
void KEY_obj_setLongClick_timer(Key_Function *KeyObj, uint16_t time);       // 设置按键对象的 长按 时间
void KEY_obj_setState(Key_Function *KeyObj, KeyState sta);                  // 设置按键对象的 状态 可以实现软件方面的点击、双击、长按
void KEY_obj_Disable(Key_Function *KeyObj);                                 // 禁用按键
void KEY_obj_Enable(Key_Function *KeyObj);                                  // 启用按键
/****************************************************************************************************************/

#endif
